namespace Study203 {

  class Person {



    // public: 公有成员，默认修饰符:自己类内部可以访问，继承的子类可以访问，类外可以访问
    // private: 私有成员，只能在类的内部访问，类外不能访问，继承的子类不能访问。
    // protected: 受保护成员，可以在类及其子类中访问，类外不能访问。

    public name: string  // 公有
    private age: number  // 私有
    protected sex: string // 保护

    constructor() {
      this.age = 22
      this.name = '长生'
      this.sex = '男'
    }

    // 给方法类型
    sayHi(): void {
      // 类内部测试
      console.log(`类内部测试 公有name：${this.name}`);
      console.log(`类内部测试 私有的age ：${this.age}`);
      console.log(`类内部测试 受保护的 sex：${this.sex}`);

    }

  }


  class Student extends Person {


    toStudy() {
      // 继承的子类内部测试
      console.log(`继承的子类内部测试 公有name：${this.name}`);
      //  console.log(`继承的子类内部测试 私有的age ：${this.age}`);
      console.log(`继承的子类内部测试 受保护的 sex：${this.sex}`);
    }

  }


  // 限制对象的类型
  const pc1: Person = new Person()
  // 类内方法调用测试
  pc1.sayHi()


  // 类外测试
  console.log(`类外部测试 公有name：${pc1.name}`);
  // console.log(`类外部测试 私有的age ：${pc1.age}`); // 属性“age”为私有属性，只能在类“Person”中访问
  // console.log(`类外部测试 受保护的 sex：${pc1.sex}`); // 属性“sex”受保护，只能在类“Person”及其子类中访问。ts(2445)




}

export {}